// 这是一个针对demo选择屏幕的基本Flutter widget测试。

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:demo/main.dart';

void main() {
  testWidgets('Demo选择屏幕冒烟测试', (WidgetTester tester) async {
    // 构建我们的应用并触发一帧。
    await tester.pumpWidget(const MyApp());

    // 验证demo选择屏幕是否显示。
    expect(find.text('Choose a State Management Demo'), findsOneWidget);
    expect(find.text('Scoped Model Demo'), findsOneWidget);
    expect(find.text('Riverpod Demo'), findsOneWidget);
    expect(find.text('MobX Chat Demo'), findsOneWidget);

    // 验证描述文本是否存在。
    expect(
      find.textContaining('Learn how to use Scoped Model'),
      findsOneWidget,
    );
    expect(
      find.textContaining('Modern state management with Riverpod'),
      findsOneWidget,
    );
    expect(
      find.textContaining('Existing MobX-based chat application'),
      findsOneWidget,
    );

    // 验证图标是否存在。
    expect(find.byIcon(Icons.account_tree), findsOneWidget);
    expect(find.byIcon(Icons.water_drop), findsOneWidget);
    expect(find.byIcon(Icons.chat), findsOneWidget);
  });

  testWidgets('可以导航到Scoped Model demo', (WidgetTester tester) async {
    // 构建我们的应用并触发一帧。
    await tester.pumpWidget(const MyApp());

    // 查找并点击Scoped Model demo卡片。
    final scopedModelCard = find.textContaining('Scoped Model Demo');
    expect(scopedModelCard, findsOneWidget);

    await tester.tap(scopedModelCard);
    await tester.pumpAndSettle();

    // 验证我们是否导航到了Scoped Model demo屏幕。
    expect(find.text('Scoped Model Demo'), findsOneWidget);
    expect(find.text('User Information'), findsOneWidget);
    expect(find.text('Counter Value'), findsOneWidget);
  });

  testWidgets('可以导航到Riverpod demo', (WidgetTester tester) async {
    // 构建我们的应用并触发一帧。
    await tester.pumpWidget(const MyApp());

    // 查找并点击Riverpod demo卡片。
    final riverpodCard = find.textContaining('Riverpod Demo');
    expect(riverpodCard, findsOneWidget);

    await tester.tap(riverpodCard);
    await tester.pumpAndSettle();

    // 验证我们是否导航到了Riverpod demo屏幕。
    expect(find.text('Riverpod Demo'), findsOneWidget);
    expect(find.text('User Information'), findsOneWidget);
    expect(find.text('Counter Value'), findsOneWidget);
  });
}
